package xyz.hubery.service;

import xyz.hubery.domain.User;
import com.baomidou.mybatisplus.extension.service.IService;
import xyz.hubery.dto.UserDTO;
import xyz.hubery.vo.*;

import java.util.List;

public interface UserService extends IService<User>{

    /**
     * 修改用户的审核状态
     * @param id
     * @param authStatus
     * @param authCode
     * @param remark 拒绝的原因
     *
     *
     */
    void updateUserAuthStatus(Long id, Byte authStatus, Long authCode, String remark);

    /**
     * 用户进行实名认证
     * @param userId 用户id
     * @param identifyForm 认证表单
     * @return true 认证成功，false 认证失败
     */
    boolean authAccount(Long userId, IdentifyForm identifyForm);

    /**
     * 检查手机号和验证码是否正确
     * @param userId
     * @param phoneRequest
     * @return
     */
    boolean checkPhoneAndCode(Long userId, UpdatePhoneRequest phoneRequest);

    /**
     * 检查新的手机号是否被占用，未被占用则发送短信
     * @param mobile 手机号
     * @param countryCode 国家代码
     * @return
     */
    boolean checkNewTelAndSend(String mobile, String countryCode);

    /**
     * 修改登录密码
     * @param userId
     * @param passwordRequest
     * @return
     */
    boolean updateLoginPassword(Long userId, UpdateLoginPasswordRequest passwordRequest);

    /**
     * 重置交易密码
     * @param userId
     * @param passwordRequest
     * @return
     */
    boolean setPayPassword(Long userId, ResetPayPasswordRequest passwordRequest);

    /**
     * 修改交易密码
     * @param userId
     * @param passwordRequest
     * @return
     */
    boolean updatePayPassword(Long userId, UpdatePayPasswordRequest passwordRequest);

    /**
     * 根据id查询该用户的邀请列表
     * @param userId
     * @return
     */
    List<User> invitesList(Long userId);

    /**
     * 重置密码
     * @param passwordRequest
     * @return
     */
    boolean setPassword( SetPasswordRequest passwordRequest);

    /**
     * 新用户注册
     * @param registerForm
     * @return
     */
    boolean register(RegisterForm registerForm);

    /**
     * 批量查询用户的基本信息
     * @param ids
     * @return
     */
    List<UserDTO> getBasicUserInfo(List<Long> ids);
}
